﻿#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    // 1. 基本 lambda 表达式
    auto sayHello = []() {
        cout << "Hello from lambda!" << endl;
    };
    sayHello();

    // 2. 带参数和返回值的 lambda
    auto add = [](int a, int b) -> int {
        return a + b;
    };
    cout << "add(3, 4) = " << add(3, 4) << endl;

    // 3. 捕获外部变量
    int x = 10;
    auto addX = [x](int a) {
        return a + x;
    };
    cout << "addX(5) = " << addX(5) << endl;  // 15

    // 4. 捕获引用
    int y = 20;
    auto modifyY = [&y]() {
        y += 5;
    };
    modifyY();
    cout << "Modified y = " << y << endl;

    // 5. mutable 捕获（可以修改值捕获的变量副本）
    auto mutableLambda = [x]() mutable {
        x += 100;
        return x;
    };
    cout << "mutable lambda result = " << mutableLambda() << endl;
    cout << "original x = " << x << endl;  // x 未被修改

    // 6. 在算法中使用 lambda（排序）
    vector<int> vec = {5, 2, 8, 1, 9};
    sort(vec.begin(), vec.end(), [](int a, int b) {
        return a < b;  // 升序
    });
    cout << "排序后的数组: ";
    for (int val : vec) {
        cout << val << " ";
    }
    cout << endl;

    return 0;
}
